/*
 * Copyright (C) 2022 KylinSoft Co., Ltd.
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef BLURHELPER_H
#define BLURHELPER_H

#include <QObject>
#include <QRect>
#include <qwindowdefs.h>
#include <KWindowEffects>

class QQmlApplicationEngine;
class BlurHelper : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QRect rect READ rect WRITE setRect NOTIFY rectChanged)
    Q_PROPERTY(int radius READ radius WRITE setRadius NOTIFY radiusChanged)
    Q_PROPERTY(QObject *window READ window WRITE setWindow NOTIFY windowChanged)

public:
    explicit BlurHelper(QObject *parent = nullptr);
    ~BlurHelper();

    Q_INVOKABLE void updateBlur();

    QRect rect() const {
        return m_rect;
    }

    void setRect(const QRect &rect);

    int radius() const {
        return m_radius;
    }
    void setRadius(const int &radius);

    QObject *window() const;
    void setWindow(QObject *window);

    void enableBlur();

    QRegion calculateRegion(QRect rect, int radius);

Q_SIGNALS:
    void rectChanged();
    void radiusChanged();
    void windowChanged();

private:
    QRect m_rect;
    int m_radius;
    QObject *m_window = nullptr;
};

#endif // BLURHELPER_H
